import java.util.Scanner;
import java.util.*;
public class Main {
    /*给你一个整数数组 nums ，判断是否存在三元组 [nums[i], nums[j],
    nums[k]] 满足 i != j、i != k 且 j != k ，同时还满足 nums[i] + nums[j] + nums[k] == 0 。
    请你返回所有和为 0 且不重复的三元组。
    注意：答案中不可以包含重复的三元组。*/
    public static List<List<Integer>> seek(int[] nums) {
        List<List<Integer>> res=new ArrayList<>();
        Arrays.sort(nums);
        for(int i=0;i<nums.length-2;i++){
            //如果固定值相同则跳过
            if(i>0&&nums[i]==nums[i-1])continue;
            if(nums[i]+nums[i+1]+nums[i+2]>0)break;
            if(nums[i]+nums[nums.length-2]+nums[nums.length-1]<0)continue;
            int le=i+1;
            int ri=nums.length-1;
            while(le<ri){
                int sum=nums[i]+nums[le]+nums[ri];
                if(sum>0){
                    ri--;
                }
                else if(sum<0){
                    le++;
                }
                else{
                    res.add(Arrays.asList(nums[i],nums[le],nums[ri]));
                    //如果nums[le]与下个元素相同则直接跳过，避免集合重复
                    while(nums[le]==nums[le+1]&&le<ri){
                        le++;
                    }
                    //跳过右端相同元素
                    while(nums[ri]==nums[ri-1]&&le<ri){
                        ri--;
                    }
                    //移动
                    le++;
                    ri--;
                }
            }
        }
        return res;
    }
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] nums=new int[n];
        for(int i=0;i<n;i++){
            nums[i]=sc.nextInt();
        }
        List<List<Integer>>list=seek(nums);
        for(List<Integer> list1:list){
            for(int i=0;i<list1.size();i++){
                System.out.print(list1.get(i)+" ");
            }
        }
    }
}